import geopandas as gpd
import os

def geojson_to_shp(geojson_filename):
    """
    将指定的 GeoJSON 文件转换为 Shapefile 格式
    
    Args:
        geojson_filename: GeoJSON 文件名（位于 geojson 文件夹中）
    """
    try:
        # 获取当前脚本所在目录
        current_dir = os.path.dirname(os.path.abspath(__file__))
        geojson_dir = os.path.join(current_dir, 'geojson')
        shp_dir = os.path.join(current_dir, 'shp')
        
        # 构建完整的文件路径
        geojson_path = os.path.join(geojson_dir, geojson_filename)
        
        # 检查源文件是否存在
        if not os.path.exists(geojson_path):
            print(f"错误：文件 {geojson_filename} 不存在于 geojson 文件夹中")
            return
        
        # 如果输出目录不存在，创建它
        if not os.path.exists(shp_dir):
            os.makedirs(shp_dir)
        
        # 构建输出文件路径
        shp_name = os.path.splitext(geojson_filename)[0] + '.shp'
        shp_path = os.path.join(shp_dir, shp_name)
        
        try:
            # 读取 GeoJSON 文件
            gdf = gpd.read_file(geojson_path)
            
            # 转换为 Shapefile
            gdf.to_file(shp_path)
            
            print(f"成功转换: {geojson_filename} -> {shp_name}")
            
        except Exception as e:
            print(f"转换文件时发生错误: {str(e)}")
        
    except Exception as e:
        print(f"程序执行出错: {str(e)}")

if __name__ == '__main__':
    # 指定要转换的 GeoJSON 文件名
    geojson_filename = "daxin_fill.json"
    geojson_to_shp(geojson_filename)